; 实验9 在屏幕中间显示字符串
; 在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'
; 80x25彩色字符模式显示缓冲区，B8000H~BFFFFH 32KB，可显示25行，每行80个字符，每个字符有256中属性
; 一个显示字符占两个字节，分别存放ASCII和属性，一屏的内容占4000个字节，显示缓冲区，默认分为8页，每页4KB
; 通常显示第0页内容，即B8000H~B8F9FH,每行160字符
; 第一行000H~09FH,第二行0A0h~13FH
assume cs:codesg
datasg segment
	db 'welcome to masm!'
	; 红底绿字 红底闪烁绿字 红底高亮绿字 黑底白字 白底蓝字
	db 01000010B,11000010,01001010B,00000111B,01110001B
datasg ends

stacksg segment
	dw 8 dup(0)
stacksg ends

codesg segment
start:
        ; 设置显示数据段 到ds
		mov ax,datasg
		mov ds,ax
        ; 设置栈段
		mov ax,stacksg
		mov ss,ax
		mov sp,10H
        ; 设置显示缓存区段 es
		mov ax,0B800H
		mov es,ax

		mov bx,780h
		mov si,10h
		mov cx,3

		mov di,0
	s1:	push cx
		push bx
		mov di,0
		mov cx,10h
	s2:	
		mov byte ptr es:[bx],ds:[di]
		mov byte ptr es:[bx].1,ds:10[si]
		inc di
		add bx,2
		loop s2

		pop bx
		add bx,160
		inc si
		pop cx
		loop s1

		mov ax,4c00h
		int 21h
codesg ends
end start